/// 环境配置模型类
class CNMEvnModel {
  /// 不同环境下的域名
  final String appDomain;

  CNMEvnModel({required this.appDomain});
}

/// 声明环境变量类
abstract class CNMEvnName {
  static const String evnKey = 'CNM_APP_ENV';

  /// 测试
  static const String debug = 'debug';

  /// 预发布
  static const String profile = 'profile';

  /// 正式
  static const String release = 'release';
}

/// 获取配置环境信息类
class CNMEvn {
  /// 开发环境(测试)
  static final CNMEvnModel _debugEvn = CNMEvnModel(appDomain: 'https://test.com');

  /// 预发布环境
  static final CNMEvnModel _profileEvn = CNMEvnModel(appDomain: 'https://profile.com');

  /// 生产环境(正式)
  static final CNMEvnModel _releaseEvn = CNMEvnModel(appDomain: 'https://release.com');

  /// 获取当前 --dart-define 设置的环境
  static String get _getAppEnvString => const String.fromEnvironment(CNMEvnName.evnKey);

  /// 根据不同环境获取相应配置
  static void _getEvn() {
    /// String.fromEnvironment('xxx') 能获取到 命令中 --dart-define=xxx=zzz，以xxx为key对应的值zzz
    /// 运行 flutter 项目时，可以使用 flutter run --dart-define=xxx=zzz
    /// 例子：flutter run --dart-define=CNM_APP_ENV=release
    /// 多配置例子：flutter run --dart-define=CNM_APP_ENV=release --dart-define=CNM_APP_NAME=CNM项目
    switch (_getAppEnvString) {
      case CNMEvnName.debug:
        evnConfig = _debugEvn;
        break;
      case CNMEvnName.profile:
        evnConfig = _profileEvn;
        break;
      case CNMEvnName.release:
        evnConfig = _releaseEvn;
        break;
      default:
        evnConfig = _debugEvn;
    }
  }

  /// 初始化环境配置
  static void initEnvironment() => _getEvn();

  /// 获取当前环境配置(默认 debug)
  static CNMEvnModel evnConfig = _debugEvn;
}
